/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author CORE
 */
    
package BD;
/*atual*/
import java.sql.*;
import java.util.ArrayList;
import javax.swing.JOptionPane;//
import sun.security.util.Length;

public class Caixa extends bd {
//id_caixa, saldo_incial, dtabertura, dtfechamento, aberto)    

private int   id_caixa      =0;
private float saldo_inicial  =0; 
private float total         =0;  
private Timestamp dtabertura    ;
private Timestamp dtfechamento ;
private boolean aberto      = true;       
private utilsPim  utls = new utilsPim();
    
    private int mesa  = 0   ;
    private String cliente = ""  ;        
    private ArrayList<Caixa_Iten> ListCaixa_itens = new ArrayList<Caixa_Iten>();

    public ArrayList<Caixa_Iten> getListCaixa_itens() {
        return ListCaixa_itens;
    }

    public void setListCaixa_itens(ArrayList<Caixa_Iten> ListCaixa_itens) {
        this.ListCaixa_itens = ListCaixa_itens;
    }

    public int getId_caixa() {
        return id_caixa;
    }

    public void setId_caixa(int id_caixa) {
        this.id_caixa = id_caixa;
    }

    public float getSaldo_inicial() {
        return saldo_inicial;
    }

    public void setSaldo_incial(float saldo_inicial) {
        this.saldo_inicial = saldo_inicial;
    }

    public float getTotal() {
        return total;
    }

    public void setTotal(float total) {
        this.total = total;
    }

    public Timestamp getDtabertura() {
        return dtabertura;
    }

    public void setDtabertura(Timestamp dtabertura) {
        this.dtabertura = dtabertura;
    }

    public Timestamp getDtfechamento() {
        return dtfechamento;
    }

    public void setDtfechamento(Timestamp dtafechamento) {
        this.dtfechamento = dtafechamento;
    }

    public boolean getAberto() {
        return aberto;
    }

    public void setAberto(boolean aberto) {
        this.aberto = aberto;
    }

    public int getMesa() {
        return mesa;
    }

    public void setMesa(int mesa) {
        this.mesa = mesa;
    }

    public String getCliente() {
        return cliente;
    }

    public void setCliente(String cliente) {
        this.cliente = cliente;
    }

//id_caixa, saldo_incial, dtabertura, dtfechamento, aberto)   
    public boolean AbrirCaixa() {            
        try {
            if (!estaConectado()) 
                conecta();          
            stmt = getConexao().createStatement();          
                                 
            sql = "INSERT INTO caixa("
                    +"id_caixa, dtabertura, dtfechamento, aberto, saldo_inicial)"
                    + "VALUES ((select coalesce(max(id_caixa)+1,1) from caixa),"
                    +"'"+ utls.getDataHoraHoje()+"',"
                    +"'"+ utls.getDataHoraHoje()+"',"
                    +"'"+ Boolean.toString(true)+"',"
                    +"'"+ utls.formatavalorsemmask(this.getSaldo_inicial())+"');"
//                    +"'"+ Float.toString(this.getSaldo_inicial())+"');"
                    ;            
            stmt.executeUpdate(sql);
            stmt.close();
            //System.out.print(this.sql);
            return true;
            
        } catch (SQLException objErro) {
            JOptionPane.showMessageDialog(null, "Não foi possível executar a Query Abrir caixa\n" + objErro.getMessage());
            return false;
        }
    }

    public boolean FecharCaixa() {
        try {
            if (!estaConectado()) 
                conecta();          
//id_caixa, saldo_incial, dtabertura, dtfechamento, aberto)   
            stmt = getConexao().createStatement();          
            sql = "UPDATE caixa "+
                  "SET aberto= '"+ "false"+ "', "+                  
                  " dtfechamento ='"+utls.getDataHoraHoje()+"'"+
                  " where aberto = true;"  ;
                  //" WHERE id_caixa='"+ Integer.toString(this.getId_caixa())+"';";
                   
            stmt.executeUpdate(sql);
            stmt.close();
            //System.out.print(this.sql);
            return true;
        } catch (SQLException objErro) {
            JOptionPane.showMessageDialog(null, "Não foi possível executar a Query \n" + objErro.getMessage());
            return false;
        }

    }

    public ResultSet consultar() {
        if (!estaConectado()) {
            conecta();
        }
        try {
            stmt = getConexao().createStatement();
            sql =   "SELECT caixa.id_caixa, caixa.saldo_inicial, caixa.dtabertura, "
                                        + "caixa.dtfechamento, caixa.aberto,      "+
                    "  (select sum(coalesce(valor,0)) "
                                        + "from caixa_iten "
//                                        +" inner join pedidos on (pedidos.id_pedidos=caixa_iten.id_pedidos and pedidos.situacao=F)"    
                                        + "where caixa_iten.id_caixa=caixa.id_caixa) as total "+
                    " FROM caixa           "+   
                    " where caixa.aberto = true;";
            rs = stmt.executeQuery(sql);
            return rs;
            
        } catch (SQLException objErro) {
            JOptionPane.showMessageDialog(null, "Não foi possível executar a Query \n" + objErro.getMessage());
            return null;
        }
        
    }
/*private int   id_caixa      =0;
private float saldo_incial  =0; 
private float total         =0;  
private Timestamp dtabertura          ;
private Timestamp dtafechamento       ;
private boolean aberto      = true;       
    private int mesa  = 0   ;
    private String cliente = ""  ;        */
    
    public ArrayList<Caixa> getItens(){
        ArrayList<Caixa> itens = new ArrayList<Caixa>();
        rs = this.consultar();
        try{//id_caixa, saldo_incial, dtabertura, dtfechamento, aberto)               
            while(rs.next()){
                Caixa       obj  = new Caixa();
                Caixa_Iten obji = new Caixa_Iten();
//                ArrayList<Caixa_Iten> arri = new ArrayList<Caixa_Iten>();
                obj.setId_caixa(rs.getInt("id_caixa"));
                obj.setSaldo_incial(rs.getFloat("saldo_inicial"));
                obj.setDtabertura(rs.getTimestamp("dtabertura"));
                obj.setDtfechamento(rs.getTimestamp("dtfechamento"));
                obj.setAberto(rs.getBoolean("aberto"));
                
                //preenche o campo forekey do detalhe para trazer já amarrado
                obji.setId_caixa(rs.getInt("id_caixa"));                
                //busca os detalhes pestencentes ao mestre                
                obj.setListCaixa_itens(obji.getItens());


                itens.add(obj);
            }
            stmt.close();
            disconecta();
        }
        catch(SQLException erro){            
            JOptionPane.showMessageDialog(null, erro.getMessage());
            
        }        
        return itens;
    }
    
    public static void main(String []args){        
        Caixa cx = new Caixa();
        ArrayList<Caixa> lst = new ArrayList<Caixa>();
        ArrayList<Caixa_Iten> lsti = new ArrayList<Caixa_Iten>();
        utilsPim utl = new utilsPim();
        //cx.setAberto(true);
        //cx.setCliente(1);
        //cx.setDtabertura(utl.getdataHoje());
        //cx.setDtfechamento(utl.getdataHoje());
        //cx.setSaldo_incial(100);
        System.out.println(0);
        cx.setId_caixa(2);
        //cx.FecharCaixa();
        //cx.incluir();
        System.out.println(1);
        
        lst = cx.getItens();         
        
                
        
        for (int i = 0; i < lst.size() ; i++) {
                System.out.println("ini "+ lst.get(i).getSaldo_inicial());                      
            for (int j = 0;lst.get(i).ListCaixa_itens.size() > j; j++) {
                System.out.println("aki "+ lst.get(i).ListCaixa_itens.get(j).getTipopgto());                      
//                System.out.println("produto"+ list.get(i).sabores_itens.get(j).getDesc_produto());                      
                
            }
        }
//        sab.setId_sabores(1);
//        sab.setDescricao("a moda da casa");
//        sab.incluir();
//        sab.alterar();
//        sab.excluir();
    }

    
}
    
    

